

#ifndef ZGEOMENT_DBBODY_H
#define ZGEOMENT_DBBODY_H

#include "zdbmain.h"
#include "zdbsubeid.h"

#pragma pack (push, 8)

class UcDbBody: public  UcDbEntity
{
public:
    UCDB_DECLARE_MEMBERS(UcDbBody);
	     UcDbBody();
    virtual ~UcDbBody();

    virtual ZSoft::Boolean    isNull       () const;
    virtual void              list         () const;

	UCDB_PORT virtual void	  dragStatus(const UcDb::DragStat);
	virtual void*             ZSMBodyCopy(bool bDeepCopy = false) const; 
	virtual void const *      getLockedZSMBody();                        
	virtual void              unlockZSMBody();                           
	virtual void*             getLockedWritableZSMBody();                
	virtual void              commitWritableZSMBody();                   
	virtual Ucad::ErrorStatus setZSMBody      (const void* modelerBody); 


    virtual UcDbSubentId    internalSubentId (void*) const;                   
    virtual void*           internalSubentPtr(const UcDbSubentId& id) const;  

    static  Ucad::ErrorStatus acisOut      (const ZTCHAR* fileName,
					    const UcDbVoidPtrArray&);
    static  Ucad::ErrorStatus acisIn       (const ZTCHAR* fileName,
					    UcDbVoidPtrArray&);

    virtual  Ucad::ErrorStatus getSubentPathsAtGsMarker(
				UcDb::SubentType type,
                                ZSoft::GsMarker gsMark,
				const UcGePoint3d& pickPoint,
				const UcGeMatrix3d& viewXform,
				int& numPaths,
				UcDbFullSubentPath*& subentPaths,
				int numInserts = 0,
				UcDbObjectId* entAndInsertStack = NULL) const;

    virtual Ucad::ErrorStatus getGsMarkersAtSubentPath(
				const UcDbFullSubentPath& subPath,
                                UcArray<ZSoft::GsMarker>& gsMarkers) const;

    virtual UcDbEntity*       subentPtr(const UcDbFullSubentPath& id) const;
 
    virtual ZSoft::UInt32 numChanges() const;
	UCDB_PORT virtual bool usesGraphicsCache();

    void invalidateCachedBodySubentIds();
};

#pragma pack (pop)

#endif
